%主程序
%Step1
  %Step1.1载入数据
  I=8;%时间段数
  J=3;%病种数
  M=48;%病人数,论文那个表只给到了48个数
  %Step1.2初始矩阵
  S=zeros(I,J);
  Q=zeros(I,M);R=zeros(I,M);%Q矩阵与R矩阵的建立
  Q1=[ones(I,1) Q];%Q1矩阵，多加入一列以避免Q(i,0)不存在的情况
  R1=[ones(I,1) R];%R1矩阵，多加入一列以避免R(i,0)不存在的情况
  p=[0.1,0.5,0.9];%p矩阵
  f0=0;%初始利润为0
  lambda=3;%λ值的设定
  dt=1;%Δti值的设定
  fL1=findfL(lambda,dt,2*M+1);%求出fL（L这一随机变量的密度函数，L是i时间段可以救助的病人数）
  FL1=findF(2*M+1,fL1);%求出FL（L是i时间段可以救助的病人数，这一随机变量的分布函数，注意本文定义与所学差了个等号）
        j_all=[2 2 1 3 3 3 3 3 2 2 1 2 3 3 3 3 1 1 2 1 3 1 2 3 1 1 1 2 3 1 2 3 3 1 2 1 3 3 2 2 2 1 1 2 1 1 2 1];%论文给的nthcall的病种j
  i_all_paper=[1 4 6 3 5 2 7 6 1 4 2 3 5 1 7 2 4 6 8 4 4 6 6 1 3 3 8 3 6 8 2 8 1 5 5 7 3 7 8 4 8 2 2 8 5 1 5 8];%论文给的nthcall的slot
for n=1:M %从1th call开始  
%Step2,wait for nth call
%Step3,nth call occurs and is of type j
  %此处type j不确定，为1-J其中一个数。
  %j=randi([1,J],1,1);%随机确定j。
  %j_all(n)=j;%记录每回合的j。
  %重复论文的病人种类。若要自己随机请采用上两行命令
  j=j_all(n);
  
%Step4
  %Step4.1 更新S
  %不同的i，都得到一个新S，分别求出fi，比较后把病人安排到f最大的位置或拒绝病人
  for i=1:I
  S0=S;%建立一个临时的S
  S0(i,j)=S0(i,j)+1;
  
  %Step4.2 若i=i，此时的Q与R
  %注意，此时我们的Q，R还不是根据Qn-1，Rn-1做的，有待改进。
  Q1=findQ(S0,J,I,p,n);%注意这里得到的是Q1，就是第一列表示k=0
  R1=findR(Q1,I,dt,lambda,n,fL1,FL1);%注意这里得到的是Q1，就是第一列表示k=0
  
  %Step4.3 求出fi
  f(i)=fQR(Q1,R1);
  end
  
  %Step5
  f_all(n)=max(f);%f_all储存每call后的最大值
  i=find(f==f_all(n));%找出最大值的i
  i=i(1);%当同时有多个i取最大值时，选取第一个i
  i_all(n)=i;%记录每call选择的i
  %if f_all(n)>=f_all(n-1)
  %f0=fnew;%记载新fn-1
      S(i,j)=S(i,j)+1;%更新S
      Q1=findQ(S,J,I,p,n);%更新Q
      R1=findR(Q1,I,dt,lambda,n,fL1,FL1);%更新R
  %else
   %   break
end


%我的profit略高于文章的，why？
%计算论文的最高profit
S=zeros(I,3);
for n=1:34
    S(i_all_paper(n),j_all(n))=S(i_all_paper(n),j_all(n))+1;
end
Q1=findQ(S,J,I,p,34);
R1=findR(Q1,I,dt,lambda,34,fL1,FL1);
fmax=fQR(Q1,R1);



